package redis

// TODO 使用redigo封装一个redis的操作,另外对比redigo和go-redis哪个库好用一些.

// FuzzyMatch strings的模糊匹配:
//	入参 prefix:匹配前缀
// 	出参	[]interface:返回的keys的列表;
// 		error:返回是否有错误;
//func FuzzyMatch(redis *confredis.RedisEndpoint, prefix string) ([]interface{}, error) {
//	key := fmt.Sprintf("%v*", prefix)
//	reply, err := redigo_redis.ByteSlices(redis.Exec(
//		confredis.Command("KEYS", key)),
//	)
//	if err != nil {
//		logrus.Warnf("keys error,[key:%v, err:%s]", key, err.Error())
//		return nil, err
//	}
//	keys := make([]interface{}, 0, len(reply))
//	for _, key := range reply {
//		keys = append(keys, string(key))
//	}
//	return keys, err
//}
//
//// BatchGet 批量获取string ==> 不满足需求,取出来的内容无序
//func BatchGet(redis *confredis.RedisEndpoint, keys []interface{}) ([][]byte, error) {
//	reply, err := redigo_redis.ByteSlices(redis.Exec(
//		confredis.Command("MGET", keys...)),
//	)
//	if err != nil {
//		logrus.Warnf("mget error,[keys:%v, err:%s]", keys, err.Error())
//	}
//	return reply, err
//}
//
//// ZSetAdd zset增加元素
//func ZSetAdd(redis *confredis.RedisEndpoint, key string, score int64, content []byte) error {
//	_, err := redis.Exec(confredis.Command("ZADD", key, score, content))
//	if err != nil {
//		logrus.Warnf("ZADD error,[key:%v,content.len=%v, err:%s]", key, len(content), err.Error())
//	}
//	return err
//}
//
//// ZSetRangeByScore 批量获取分数区间内zset所有元素
//// minSCore:最小分数(单位:毫秒时间戳)--最早一次解码图片时间
//// maxSCore:最大分数(单位:毫秒时间戳)--最近一次解码图片时间
//// 出参:[][]byte:存储在redis中的图片数组
//func ZSetRangeByScore(redis *confredis.RedisEndpoint, key string, minScore, maxScore uint64) ([][]byte, error) {
//	reply, err := redigo_redis.ByteSlices(redis.Exec(
//		confredis.Command("ZRANGEBYSCORE", key, minScore, maxScore)),
//	)
//	if err != nil {
//		logrus.Warnf("ZRANGEBYSCORE error,[key:%v, err:%s]", key, err.Error())
//	}
//	return reply, err
//}
//
//// ZSetRemoveRangeByScore 批量删除分数区间内zset所有元素
//// minSCore:最小分数(单位:毫秒时间戳)--最早一次解码图片时间
//// maxSCore:最大分数(单位:毫秒时间戳)--最近一次解码图片时间
//// 出参:int64:表示移除的元素个数
////	TODO 增加一个每天凌晨2点定时删除的前一天数据的接口,否则redis要爆炸ð
////	 或者redis中的视频合成key由decoder-task来维护删除,定时删除XXs之前的数据
////	 或者给这些keys一个过期时间,即可
//func ZSetRemoveRangeByScore(redis *confredis.RedisEndpoint, key string, minScore, maxScore uint64) (int64, error) {
//	reply, err := redigo_redis.Int64(redis.Exec(
//		confredis.Command("ZREMRANGEBYSCORE", key, minScore, maxScore)),
//	)
//	if err != nil {
//		logrus.Warnf("ZREMRANGEBYSCORE error,[key:%v, err:%s]", key, err.Error())
//	}
//	return reply, err
//}
//
//// ExpireKey 设置key的过期时间 expire:过期时间(单位:s)
//func ExpireKey(redis *confredis.RedisEndpoint, key string, expire int64) error {
//	_, err := redis.Exec(
//		confredis.Command("EXPIRE", key, expire),
//	)
//	if err != nil {
//		logrus.Warnf("EXPIRE error,[key:%v, err:%s]", key, err.Error())
//	}
//	return err
//}
//
//// SetKeyWithExpire 设置key的内容及过期时间 content:存储内容;expire:过期时间(单位:s)
//func SetKeyWithExpire(redis *confredis.RedisEndpoint, key, content string, expire int64) (err error) {
//	if expire > 0 {
//		_, err = redis.Exec(confredis.Command("SETEX", key, expire, content))
//	} else {
//		_, err = redis.Exec(confredis.Command("SET", key, content))
//	}
//	if err != nil {
//		logrus.Warnf("set error,[key:%v, expire:%v, err:%s]", key, expire, err.Error())
//	}
//	return err
//}
//
//// ExistKey 检查key是否存在
//func ExistKey(redis *confredis.RedisEndpoint, key string) (bIsExist bool, err error) {
//	bIsExist, err = redigo_redis.Bool(redis.Exec(confredis.Command("EXISTS", key)))
//	if err != nil {
//		logrus.Warnf("EXISTS error,[key:%v, err:%s]", key, err.Error())
//	}
//	return
//}
//
//// GetKey 查询key内容
//func GetKey(redis *confredis.RedisEndpoint, key string) (interface{}, error) {
//	reply, err := redis.Exec(confredis.Command("GET", key))
//	if err != nil && err != redigo_redis.ErrNil {
//		logrus.Warnf("GET error,[key:%v, err:%s]", key, err.Error())
//	}
//	return reply, err
//}
//
//// MultiCMD redis多个命令同时执行
//func MultiCMD(redis *confredis.RedisEndpoint, cmd ...*confredis.CMD) (reply interface{}, err error) {
//	if len(cmd) == 0 {
//		return nil, nil
//	}
//	if len(cmd) == 1 {
//		reply, err = redis.Exec(cmd[0])
//	} else {
//		reply, err = redis.Exec(cmd[0], cmd[1:]...)
//	}
//	if err != nil {
//		fmt.Println(cmd)
//		logrus.Warnf("MultiCMD error,[err:%s]", err.Error())
//	}
//	return reply, err
//}
